/**
 * 当实体对象未找到时抛出的异常
 * 该异常用于在查询特定实体对象时，该对象不存在的情况
 */
package co.yixiang.exception;

import org.springframework.util.StringUtils;

/**
 * EntityNotFoundException 类继承自 RuntimeException，用于处理实体对象未找到的情况
 * 它通过接收实体类的类型、字段和值来生成具体的异常消息
 */
public class EntityNotFoundException extends RuntimeException {

    /**
     * 构造函数，用于创建 EntityNotFoundException 实例
     *
     * @param clazz 实体类的 Class 对象，用于获取实体类的名称
     * @param field 实体类中的字段名称，用于指定未找到实体的特性
     * @param val   字段的值，用于指定未找到实体的具体标识
     */
    public EntityNotFoundException(Class clazz, String field, String val) {
        super(EntityNotFoundException.generateMessage(clazz.getSimpleName(), field, val));
    }

    /**
     * 生成异常消息的私有静态方法
     *
     * @param entity 实体类的名称，首字母大写
     * @param field  实体类中的字段名称
     * @param val    字段的值
     * @return 返回格式化的异常消息
     */
    private static String generateMessage(String entity, String field, String val) {
        return StringUtils.capitalize(entity)
                + " with " + field + " "+ val + " does not exist";
    }
}
